package cn.icanci.config;

import javax.servlet.Filter;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * SpringMVC的核心流程
 * - 建立请求和Controller方法的映射集合的流程
 * - 根据请求查找对应的Controller方法的流程
 * - 请求参数绑定到方法形参 执行方法处理请求 渲染视图的流程
 *
 * - 前端发送请求到DispatcherServlet
 * - 然后进行HandlerMapping进行对比，查询请求对应的controller
 * - 查询到对应的Controller的时候，再调用其方法
 * - 返回ModelAndView 也就是返回结果 可以是JSON等
 * - 然后将返回的结果进行解析
 * - 将解析之后的结果返回给请求 也就是视图
 * @author icanci
 * @date Created in 2021/03/07 15:42
 * @version 1.0
 */
public class StartWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * SpringContext 中相关的bean
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { SpringRootConfig.class };
    }

    /**
     * DispatcherServlet 上下文中相关的bean
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { MVCConfig.class };
    }

    /**
     * Servlet请求映射路径
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

    /**
     * 过滤器
     * @return
     */
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        return new Filter[] { characterEncodingFilter };
    }
}
